package com.biosimilarity.reflection.model.paratrope;
import com.biosimilarity.reflection.model.paratrope.Absyn.*;
/** BNFC-Generated Composition Visitor
*/

public class ComposVisitor<A> implements
  com.biosimilarity.reflection.model.paratrope.Absyn.ProcessExpr.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.ProcessExpr,A>,
  com.biosimilarity.reflection.model.paratrope.Absyn.Abstraction.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.Abstraction,A>,
  com.biosimilarity.reflection.model.paratrope.Absyn.Concretion.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.Concretion,A>,
  com.biosimilarity.reflection.model.paratrope.Absyn.Nominal.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.Nominal,A>,
  com.biosimilarity.reflection.model.paratrope.Absyn.Formals.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.Formals,A>,
  com.biosimilarity.reflection.model.paratrope.Absyn.Actuals.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.Actuals,A>,
  com.biosimilarity.reflection.model.paratrope.Absyn.ProcessExprPlus.Visitor<com.biosimilarity.reflection.model.paratrope.Absyn.ProcessExprPlus,A>
{
/* ProcessExpr */
    public ProcessExpr visit(com.biosimilarity.reflection.model.paratrope.Absyn.Composition p, A arg)
    {
      ListProcessExpr listprocessexpr_ = new ListProcessExpr();
      for (ProcessExpr x : p.listprocessexpr_) {
        listprocessexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Composition(listprocessexpr_);
    }
    public ProcessExpr visit(com.biosimilarity.reflection.model.paratrope.Absyn.Reception p, A arg)
    {
      Nominal nominal_ = p.nominal_.accept(this, arg);
      Abstraction abstraction_ = p.abstraction_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Reception(nominal_, abstraction_);
    }
    public ProcessExpr visit(com.biosimilarity.reflection.model.paratrope.Absyn.Transmission p, A arg)
    {
      Nominal nominal_ = p.nominal_.accept(this, arg);
      Concretion concretion_ = p.concretion_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Transmission(nominal_, concretion_);
    }
    public ProcessExpr visit(com.biosimilarity.reflection.model.paratrope.Absyn.Transcription p, A arg)
    {
      Nominal nominal_ = p.nominal_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Transcription(nominal_);
    }
    public ProcessExpr visit(com.biosimilarity.reflection.model.paratrope.Absyn.Termination p, A arg)
    {

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Termination();
    }

/* Abstraction */
    public Abstraction visit(com.biosimilarity.reflection.model.paratrope.Absyn.Suspension p, A arg)
    {
      Formals formals_ = p.formals_.accept(this, arg);
      ProcessExpr processexpr_ = p.processexpr_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Suspension(formals_, processexpr_);
    }

/* Concretion */
    public Concretion visit(com.biosimilarity.reflection.model.paratrope.Absyn.Provision p, A arg)
    {
      Actuals actuals_ = p.actuals_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Provision(actuals_);
    }

/* Nominal */
    public Nominal visit(com.biosimilarity.reflection.model.paratrope.Absyn.AtomLiteral p, A arg)
    {
      String ident_ = p.ident_;

      return new com.biosimilarity.reflection.model.paratrope.Absyn.AtomLiteral(ident_);
    }
    public Nominal visit(com.biosimilarity.reflection.model.paratrope.Absyn.Encoding p, A arg)
    {
      ProcessExpr processexpr_ = p.processexpr_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Encoding(processexpr_);
    }

/* Formals */
    public Formals visit(com.biosimilarity.reflection.model.paratrope.Absyn.Obligation p, A arg)
    {
      ListNominal listnominal_ = new ListNominal();
      for (Nominal x : p.listnominal_) {
        listnominal_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Obligation(listnominal_);
    }

/* Actuals */
    public Actuals visit(com.biosimilarity.reflection.model.paratrope.Absyn.Remittance p, A arg)
    {
      ListProcessExprPlus listprocessexprplus_ = new ListProcessExprPlus();
      for (ProcessExprPlus x : p.listprocessexprplus_) {
        listprocessexprplus_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Remittance(listprocessexprplus_);
    }

/* ProcessExprPlus */
    public ProcessExprPlus visit(com.biosimilarity.reflection.model.paratrope.Absyn.Value p, A arg)
    {
      ProcessExpr processexpr_ = p.processexpr_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Value(processexpr_);
    }
    public ProcessExprPlus visit(com.biosimilarity.reflection.model.paratrope.Absyn.Variable p, A arg)
    {
      Nominal nominal_ = p.nominal_.accept(this, arg);

      return new com.biosimilarity.reflection.model.paratrope.Absyn.Variable(nominal_);
    }

}